\documentclass[a4paper]{article}
\usepackage{xeCJK}
\setCJKmainfont{WenQuanYi Micro Hei}
\usepackage[affil-it]{authblk}
\usepackage[backend=bibtex,style=numeric]{biblatex}
\usepackage{float}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{enumitem} 
\usepackage{hyperref}   
\usepackage{fancyhdr}
\geometry{margin=1.5cm, vmargin={0pt,1cm}}
\setlength{\topmargin}{-1cm}
\setlength{\paperheight}{29.7cm}
\setlength{\textheight}{25.3cm}

\begin{document}
% =================================================
\title{NumPDE homework \# 2}

\author{wangjie 3220100105
  \thanks{Electronic address: \texttt{3220100105@zju.edu.cn}}}
\affil{(math), Zhejiang University }


\date{Due time: \today}

\maketitle

\begin{abstract}
    本报告介绍了Poisson 方程的多重网格求解器的实现和结果。在不同的网格尺寸和初始条件下对求解器进行了测试，并分析了残差的减少率和误差的收敛率。此外，通过从解数据生成的图表对结果进行了可视化。     
\end{abstract}





% ============================================
\section*{programming homework}

Section 9.5 in the notes.
\cite{zqh}
 

% ============================================
\section{引言}
Poisson 方程是物理学和工程学中一个基本的偏微分方程。在本次作业中，我们实现了一个多重网格求解器来高效地求解poisson方程。在不同的网格尺寸和初始条件下对求解器进行了测试，并对残差减少和误差收敛进行了分析。

% ============================================
\section{数值求解要求}
编写一个基于C++的软件包。该软件包必须为用户提供以下选项：

\begin{enumerate}[leftmargin=*]
    \item \text{边界条件}：
    \begin{itemize}
        \item Dirichlet边界条件
        \item Neumann边界条件
        \item 混合边界条件（部分Dirichlet，部分Neumann）
    \end{itemize}
    
    \item \text{限制算子}：
    \begin{itemize}
        \item 全权重限制（full weighting）
        \item 注入限制（injection）
    \end{itemize}
    
    \item \text{插值算子}：
    \begin{itemize}
        \item 线性插值（linear）
        \item 二次插值（quadratic）
    \end{itemize}
    
    \item \text{循环模式}：
    \begin{itemize}
        \item V-cycle循环
        \item FMG循环
    \end{itemize}
    
    \item \text{停止准则}：
    \begin{itemize}
        \item 最大迭代次数
        \item 解的相对精度
    \end{itemize}
    
    \item \text{初始猜测}
\end{enumerate}

对于底层求解器，可以选择自主实现高斯消元法，或者使用BLAS或LAPACK库中的求解器。

% ============================================
\section{方法}
使用 V-cycle和FMG算法实现多重网格求解器，并在restriction operators上设计了full weighting和injection，在interpolation operators上设计了linear和quadratic。求解器通过在更细的网格上迭代减少残差，并在更粗的网格上校正解。重复此过程，直到残差低于指定的容差。

% ============================================
\section{结果}
下面将列举在不同边界条件、不同operator以及不同网格大小等的情况下多重网格求解器的表现效果(最大迭代次数为20，误差容忍度为1e-8，函数为sin(pi*x))。
\subsection{误差收敛}
表~\ref{tab:errors} 报告了误差向量的最大范数和相应的收敛率(以Dirichlet,injection,quadratic,V-cycle的条件为例)。收敛率显示了随着网格尺寸的增加，误差如何减少（）。

\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|}
\hline
网格尺寸 & 最大范数误差 & 收敛率 \\ \hline
32 & 8.036e-04 & - \\ \hline
64 & 2.008e-04 & 2.00 \\ \hline
128 & 5.020e-05 & 2.00 \\ \hline
256 & 1.255e-05 & 2.00 \\ \hline
\end{tabular}
\caption{误差向量的最大范数和收敛率}
\label{tab:errors}
\end{table}

\subsection{可视化}
图~\ref{fig:config1_32} 至图~\ref{fig:config1_256} (以Dirichlet,injection,quadratic,V-cycle为条件)展示了不同网格尺寸的解的可视化图像。这些图表清晰地展示了随着网格尺寸增加，解的变化情况。

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config1_32.png}
\caption{网格尺寸为 32 的解}
\label{fig:config1_32}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config1_64.png}
\caption{网格尺寸为 64 的解}
\label{fig:config1_64}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config1_128.png}
\caption{网格尺寸为 128 的解}
\label{fig:config1_128}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config1_256.png}
\caption{网格尺寸为 256 的解}
\label{fig:config1_256}
\end{figure}

下面展示了不同条件下网格尺寸为 256 的解的可视化图像。

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config3_256.png}
\caption{FMG 网格尺寸为 256 的解}
\label{fig:config3_256}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config4_256.png}
\caption{linear 网格尺寸为 256 的解}
\label{fig:config4_256}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config5_256.png}
\caption{full weighting 网格尺寸为 256 的解}
\label{fig:config5_256}
\end{figure}

下面展示了不同边界条件下网格尺寸为 256 的解的可视化图像。

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config5_256.png}
\caption{Neumann 网格尺寸为 256 的解}
\label{fig:config5_256}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config5_256.png}
\caption{mixed 网格尺寸为 256 的解}
\label{fig:config5_256}
\end{figure}

以下是一些其他函数的网格尺寸为 256 的解的可视化图像。

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config6_256.png}
\caption{$exp(x + sin(x))$ 网格尺寸为 256 的解}
\label{fig:config6_256}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[width=0.8\textwidth]{../figure/config7_256.png}
\caption{$x^3 - 2*x^2 + x + 1$ 网格尺寸为 256 的解}
\label{fig:config7_256}
\end{figure}



% ============================================
\section{讨论}
结果显示，多重网格求解器在每个 V 循环中高效地减少了残差，显示出良好的收敛特性。误差收敛率与一维 Poisson 方程的预期收敛率一致。解的可视化图表清晰地展示了随着网格尺寸增加，解的变化情况。


% ===============================================
\section*{ \center{\normalsize {Acknowledgement}} }
None.


\printbibliography

\end{document}